# Makefile de ejemplo para C++
#
# Creado: jue abr 15 15:34:19 ART 2004
#
# Copyleft 2004 - Leandro Lucarella, Bajo licencia GPL [http://www.gnu.org/]
# Modificado por Mauro Ciancio.

# CONFIGURACION
################

# Nombre del ejecutable.
target = objparser

# Extensión de los archivos a compilar (c para C, cpp o cc o cxx para C++).
extension = cpp

# Usar ccache
ccache = si

# Archivos con el código fuente que componen el ejecutable. Si no se especifica,
# toma todos los archivos con la extensión mencionada. Para especificar hay que
# descomentar la línea (quitarle el '#' del principio).
# NOTA: No poner cabeceras (.h).
#fuentes = entrada.cpp

# Si es un programa GTK+, descomentá (quitale el '#' a) la siguiente línea.
#gtk = si

# Si usa funciones de math.h, descomentá (quitale el '#' a) la siguiente línea.
#math = si

# Si usa pthreads, descomentá (quitale el '#' a) la siguiente línea.
#pthreads = si

# Si se quiere compilar estaticamente, descomentar la siguiente linea
#static = si

# usar glut
#glut = si

# usar sdl
#sdl = si

#usar opengl
#opengl = si

# si usa collada
#collada = si

# boost regexp
regexp = si


# CONFIGURACION "AVANZADA"
###########################

# Opciones para el compilador C/C++ en modo ansi.
CFLAGS = -Wall -pedantic -pedantic-errors

# Para que explote lo mas posible
#CFLAGS += -O3 -DNDEBUG

# Para valgrind o debug
CFLAGS += -g -ggdb -DDEBUG -fno-inline

# Opciones del enlazador.
LDFLAGS = 

# Estandar de C a usar
CSTD = c99

# Estandar de C++ a usar
CXXSTD = c++98


# VARIABLES CALCULADAS A PARTIR DE LA CONFIGURACION
####################################################

ifdef collada
CFLAGS += -I/usr/local/include/colladadom
LDFLAGS += -lcollada14dom -lminizip
LDFLAGS += -lboost_filesystem
endif

ifdef regexp
LDFLAGS += -lboost_regex
endif

ifdef glut
LDFLAGS += -lglut
endif

ifdef opengl
LDFLAGS += -lGL -lGLU
endif

ifdef sdl
LDFLAGS += $(shell pkg-config sdl --libs) -lSDL_image
endif

# Agrego flags y libs de GTK+ de ser necesario.
ifdef gtk
CFLAGS += $(shell pkg-config --cflags gtk+-2.0)
LDFLAGS += $(shell pkg-config --libs gtk+-2.0)
endif

# Linkeo con libm de ser necesario.
ifdef math
LDFLAGS += -lm
endif

# Linkeo con pthreads de ser necesario.
ifdef pthreads
LDFLAGS += -lpthread -pthread
endif

ifdef static
LDFLAGS += -static
endif

# Pongo flags de C para C++ también
CXXFLAGS += $(CFLAGS)

# Uso ccache
ifdef ccache
CC =  ccache gcc
CXX = ccache g++
endif

# Uso enlazador de c++ si es código no C.
ifeq ($(extension), c)
CFLAGS += -std=$(CSTD)
enlazador = $(CC)
else
#CXXFLAGS += -std=$(CXXSTD)
enlazador = $(CXX)
endif

# Si no especifica archivos, tomo todos.
fuentes ?= $(wildcard *.$(extension))


# REGLAS
#########

.PHONY: all clean

all: $(target)

o_files = $(patsubst %.$(extension),%.o,$(fuentes))

$(target): $(o_files)
	@if [ -z "$(o_files)" ]; \
	then \
		echo "No hay archivos de entrada, recuerde que la extensión debe ser '.$(extension)'."; \
		false; \
	fi >&2
	$(enlazador) $(LDFLAGS) $(o_files) $(LOADLIBS) $(LDLIBS) -o $(target)

clean:
	@$(RM) -fv *.o $(target)

